home *** CD-ROM | disk | FTP | other *** search
/ CU Amiga Super CD-ROM 27 / CU Amiga Magazine's Super CD-ROM 27 (1998)(EMAP Images)(GB)[!][issue 1998-10].iso / CUCD / Programming / JForth / Extras / Clone / pfalength.f < prev    next >
Encoding:
FORTH Source  |  1987-10-26  |  948 b   |  44 lines

  1.  
  2. \ PFALength  ( PFA -- #bytes )  calculate size of code.
  3.  
  4. only forth definitions
  5.  
  6. anew task-pfalength.f
  7.  
  8. also TGT definitions
  9.  
  10.  
  11. : PFALength?  ( pfa -- #bytes )
  12.   0 swap  0 >r              ( -- totsize opadr )   ( -r- hibra )
  13.   BEGIN
  14.      \ ?pause
  15.      dup w@  $ 4e75 -   r@ or
  16.   WHILE
  17.      dup w@ >r dup +NextOp  ( -- totsize opadr opsize )  ( -r- hibra opc )
  18.      rot over +             ( -- opadr opsize newsize )
  19.      -rot over + swap       ( -- size nextopa opadr )
  20.      r> dup BranchOp?       ( -- size nextadr opadr opcode flag )
  21.      IF
  22.           BRAto? dup r@ >   ( -- size nextadr dest replaceflag )
  23.           IF
  24.                dup r> drop >r
  25.           THEN
  26.           drop              ( -- size nextadr )
  27.      ELSE
  28.           2drop
  29.      THEN
  30.      r@ -dup
  31.      IF
  32.           ( -- size nextadr hibra )
  33.           over <=
  34.           IF
  35.                r> drop  0 >r
  36.           THEN
  37.      THEN
  38.   REPEAT
  39.   r> 2drop
  40. ;
  41.  
  42. only forth definitions
  43. also TGT
  44.